﻿using System;
using System.Data.SqlClient;
using System.Windows.Forms;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;

namespace VentaElectrodomesticos.Login
{
    public partial class FormLogin : Form
    {
        private ClaseSQL sql;
        private unUsuario unUsuario;
        FormPrincipal form;

        public FormLogin(FormPrincipal form)
        {
            InitializeComponent();
            sql = new ClaseSQL();
            this.form = form;
            
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {

        }

        public unUsuario getUsuario()
        {
            try
            {
                sql.Open();
                SqlDataReader reader = sql.busquedaSQLDataReader("SELECT idUsuario, idPersona, idTipoUsu, idSucursal, status, usuario FROM LAG.usuarios WHERE usuario = '" + this.textBoxUsusario.Text + "'");
                reader.Read();

                unUsuario unUsuario = new unUsuario(
                        reader["idUsuario"].ToString(),
                        reader["idPersona"].ToString(),
                        reader["idTipoUsu"].ToString(),
                        reader["idSucursal"].ToString(),
                        Convert.ToChar(reader["status"]),
                        reader["usuario"].ToString()
                    );
                return unUsuario;
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.StackTrace, "Error app");
                return null;
            }
            finally
            {
                sql.Close();
            }
        }

        public String getIdUsuario() {
            try
            {
                sql.Open();
                SqlDataReader reader = sql.busquedaSQLDataReader("SELECT idUsuario FROM LAG.usuarios WHERE usuario = '" + this.textBoxUsusario.Text + "'");
                reader.Read();
                return reader[0].ToString();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.StackTrace, "Error app");
                return "0";
            }
            finally {
                sql.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
                String usuario = textBoxUsusario.Text;
                String contraseña = textBoxContraseña.Text;

                if (usuario.Equals("") || contraseña.Equals(""))
                {
                    MessageBox.Show("El usuario o la contraseña ingresada son incorrectas.", "Warning!");
                }
                else
                {  
                    sql.Open();
                    String[,] parametros = new String[2, 2];
                    String sp = "LAG.sp_login";
                    parametros[0, 0] = "@arg_usuario" ;
                    parametros[1, 0] = usuario ; 
                    parametros[0, 1] = "@arg_password" ;
                    parametros[1, 1] = Utils.encriptarPassword(contraseña) ;
                    SqlDataReader reader = sql.ejecutarStoredProcedure(sp, parametros);
                    if (reader.Read())
                    {
                        int i = int.Parse( reader["errcode"].ToString() ) ;
                        
                        switch( i )
                        {
                            case 0 :
                                //login exitoso
                                /*
                                variables disponibles en reader[]
                                idUsuario , idPersona , idTipoUsu , idSucursal , status , usuario , password , 
                                intentosFallidos , errmsg , errcode
                                */
                                sql.Close();
                                this.unUsuario = getUsuario();
                                this.form.setUsuario(unUsuario.idUsuario);
                                this.form.setUsuario(unUsuario);
                                this.Hide();
                                break ;
                            case -10 :
                            case -11 :
                            case -12 :
                            case -15 :
                            case -16 :
                                MessageBox.Show(reader["errmsg"].ToString() , "Warning!");
                                break ;
                            default :
                                MessageBox.Show("El usuario y/o la contraseña ingresados son incorrectos.*", "Warning!");
                                break ;
                       }
                    }
                    /*
                    SqlDataReader reader = sql.busquedaSQLDataReader("SELECT * FROM LAG.usuarios WHERE usuario = '" + usuario + "' AND password = '" + Utils.encriptarPassword(contraseña) + "' AND status = '1'");
                    if (reader.Read())
                    {
                        sql.Close();
                        this.unUsuario = getUsuario();
                        this.form.setUsuario(unUsuario.idUsuario);
                        this.form.setUsuario(unUsuario);
                        this.Hide();
                    }
                    else
                    {
                        MessageBox.Show("El usuario o la contraseña ingresada son incorrectas.", "Warning!");
                        try
                        {
                            reader.Close();
                            String sp = "LAG.sp_intentoFallido";
                            String[,] parametros = new String[2, 1];
                            parametros[0, 0] = "@usuario";
                            parametros[1, 0] = usuario;
                            SqlDataReader query = sql.ejecutarStoredProcedure(sp, parametros);
                        }
                        catch (SqlException ex){
                            MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "Error app");
                        }
                    }
                    */
                    sql.Close();
                    textBoxUsusario.Clear();
                    textBoxContraseña.Clear();
                    this.Refresh();
                }
            
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
        protected override void OnClosed(EventArgs e)
        {
            Application.Exit();
        }

        
    }
}
